// pages/index/index.js

// 拿到数据库实例
const db = wx.cloud.database()

// collection：集合
// 集合就是 mysql 中的数据表
// 因为微信的云数据库是一个JSON格式的数据
// 获取到集合操作实例
const tasksCollection = db.collection('tasks')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    taskName: '',
    taskList: []
  },

  async save() {
    const taskName = this.data.taskName.trim()
    if (taskName === '') return

    // 直接丢对象进去，内部会自动给转JSON
    const {
      _id
    } = await tasksCollection.add({
      data: {
        name: taskName, // 任务名称
        done: false, // 是否已完成
        ctime: new Date(), // 创建时间
        deleted: false // 逻辑删除标记
      }
    })

    // 由于保存接口，调用成功后，只会返回一个 _id 给我们，并没有完整的数据
    // 所以我们不太方便往列表插入
    // 所以根据返回的 _id，再去数据库里查一份完整的数据回来
    const res = await tasksCollection.where({
      _id
    }).get()
    this.setData({
      taskName: '',
      taskList: [...res.data, ...this.data.taskList]
    })
  },

  async loadTasks() {
    const res = await tasksCollection.where({
        deleted: false
      })
      .orderBy('ctime', 'desc') // desc：降序,  asc：升序
      .get()
    this.setData({
      taskList: res.data
    })
  },

  async onClick(e) {
    console.log(e, 'e');
    const i = e.target.dataset.i
    const task = this.data.taskList[i]
    const detail = e.detail
    switch (detail) {
      case 'left':
        wx.showLoading({
          title: '更新中...',
          mask: true
        })
        await tasksCollection.where({
          _id: task._id
        }).update({
          data: {
            done: !task.done
          }
        })
        wx.hideLoading()
        this.setData({
          [`taskList[${i}].done`]: !task.done
        })
        break;
      case 'right':
        // 删除
        wx.showLoading({
          title: '删除中...',
          mask: true
        })
        // await tasksCollection.where({ _id: task._id }).remove()
        await tasksCollection.where({
          _id: task._id
        }).update({
          data: {
            deleted: true
          }
        })
        this.data.taskList.splice(i, 1)
        this.setData({
          taskList: this.data.taskList
        })
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        })
        break;
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  async onLoad(options) {
    // 页面一加载，就去读取数据库中的任务列表
    await this.loadTasks()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getTabBar().setData({
      active: 0
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})